package com.wgs.onomastici;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;

import android.annotation.SuppressLint;
import android.util.SparseArray;

@SuppressLint("SimpleDateFormat")
public class Finder {

	static final String NODE_SANTO = "santo";
	static final String ATTRIBUTE_ID = "id";
	static final String NODE_GIORNO = "giorno";
	static final String NODE_MESE = "mese";
	
	private Document document;

	public Finder(Document document) {
		super();
		this.document = document;
	}


	
	
	public List<Mese> findByName(String name) {

		SparseArray<Mese> mesiArr=new SparseArray<Mese>();
		
		List<Integer> mesi=new ArrayList<Integer>();

		NodeList santi = document.getElementsByTagName(NODE_SANTO);
		for (int i = 0; i < santi.getLength(); i++) {
			Node s = santi.item(i);

			if (s.getFirstChild().getNodeValue().trim().equalsIgnoreCase(name.trim())) {

				
				Element giorno=(Element) s.getParentNode();
				Element mese=(Element) s.getParentNode().getParentNode();
				
				Integer gg = Integer.parseInt(giorno.getAttribute(ATTRIBUTE_ID));
				Integer MM = Integer.parseInt(mese.getAttribute(ATTRIBUTE_ID));

				Mese m = mesiArr.get(MM);
				
				if (m==null){
					m = new Mese();
					m.setMese(MM);
					m.setGiorni(new ArrayList<Integer>());
					mesiArr.append(MM,m);
					mesi.add(MM);
					
				}
			
				
				m.getGiorni().add(gg);

			}

		}

		List<Mese> ret = new ArrayList<Mese>();
		if (!mesi.isEmpty()){
			for(Integer mm:mesi){
				Mese m = mesiArr.get(mm);
				Collections.sort(m.getGiorni());
				ret.add(m);
				
			}
			
		}
		
	
		Collections.sort(ret);

		return ret;
	}
	
	
	
	
	public List<String> findByDate(String gg, String MM) {

		List<String> listaSanti = new ArrayList<String>();

		NodeList nodeList = document.getElementsByTagName(NODE_MESE);
		Element mese = null;
		for (int i = 0; i < nodeList.getLength(); i++) {
			Element elMese=(Element) nodeList.item(i);		
			if (elMese.getAttribute(ATTRIBUTE_ID).equals(MM)) {
				mese = elMese;
				break;
			}

		}

		if (mese != null) {

			NodeList giorniList = mese.getElementsByTagName(NODE_GIORNO);
			Element giorno = null;
			for (int i = 0; i < giorniList.getLength(); i++) {
				Element elGiorno=(Element) giorniList.item(i);
				if (elGiorno.getAttribute(ATTRIBUTE_ID).equals(gg)) {
					giorno = elGiorno;
					break;
				}

			}

			if (giorno != null) {

				NodeList nodeListSanti = giorno.getElementsByTagName(NODE_SANTO);
				for (int i = 0; i < nodeListSanti.getLength(); i++) {
					listaSanti.add(nodeListSanti.item(i).getFirstChild().getNodeValue());
				}

			}

		}

		return listaSanti;
	}

	
	public String formatDate(List<Mese> listMesi) {
		
		String ret = "";

		for (Mese m : listMesi) {

			for (int i = 0; i < m.getGiorni().size(); i++) {

				ret += m.getGiorni().get(i);
				if (i < m.getGiorni().size() - 1)
					ret += ',';

			}
			
			Calendar cal=Calendar.getInstance();
			cal.set(Calendar.MONTH,m.getMese()-1);
			SimpleDateFormat formatter =  new SimpleDateFormat("MMMM");
			
			ret += ", " +formatter.format(cal.getTime()) + "\n";

		}

		return ret.trim();
	}

	public String formatSanti(List<String> listSanti) {

		String ret = "";

		for (String s : listSanti)
			ret += s + "\n";

		return ret.trim();
	}

}
